part of '../repository.dart';

const _kOneTimePurchaseItemTypeValue = 'one_time_purchase_item';

class _OneTimePurchaseItemDto extends Equatable implements _PurchaseItemDto {
  const _OneTimePurchaseItemDto._internal({
    required this.sku,
    required this.priceDto,
    required this.title,
    required this.legacy,
  });

  @override
  final String sku;

  @override
  final _MoneyAmountDto priceDto;

  @override
  final String title;

  @override
  final bool legacy;

  @override
  String get type => _kOneTimePurchaseItemTypeValue;

  @override
  List<Object?> get props {
    return [
      sku,
      priceDto,
      title,
      legacy,
    ];
  }

  factory _OneTimePurchaseItemDto.fromJson(Map<String, dynamic> json) {
    final priceJson = json[_kPurchaseItemPriceKey];
    final priceDto = _MoneyAmountDto.fromJson(priceJson);

    return _OneTimePurchaseItemDto._internal(
      sku: json[_kPurchaseItemSkuKey],
      priceDto: priceDto,
      title: json[_kPurchaseItemTitleKey],
      legacy: json[_kPurchaseItemLegacyKey],
    );
  }

  // factory _OneTimePurchaseItemDto.fromEntity(WebOneTimePurchaseItem oneTimePurchaseItem) {
  //   final priceDto = _MoneyAmountDto.fromEntity(oneTimePurchaseItem.price);
  //
  //   return _OneTimePurchaseItemDto._internal(
  //     sku: oneTimePurchaseItem.sku,
  //     priceDto: priceDto,
  //     title: oneTimePurchaseItem.title,
  //     legacy: oneTimePurchaseItem.legacy,
  //   );
  // }

  @override
  Map<String, dynamic> toJson() {
    return {
      _kPurchaseItemTypeKey: type,
      _kPurchaseItemSkuKey: sku,
      _kPurchaseItemPriceKey: priceDto.toJson(),
      _kPurchaseItemTitleKey: title,
      _kPurchaseItemLegacyKey: legacy,
    };
  }

  @override
  WebOneTimePurchaseItem toEntity() {
    return WebOneTimePurchaseItem(
      sku: sku,
      price: priceDto.toEntity(),
      title: title,
      legacy: legacy,
    );
  }
}
